.Dd August 2, 2021
.Dt STAGIT 1
.Os
.Sh NAME
.Nm stagit
.Nd static git page generator
.Sh SYNOPSIS
.Nm
.Op Fl c Ar cachefile
.Op Fl l Ar commits
.Op Fl u Ar baseurl
.Ar repodir
.Sh DESCRIPTION
.Nm
writes HTML pages for the repository
.Ar repodir
to the current directory.
.Pp
The options are as follows:
.Bl -tag -width Ds
.It Fl c Ar cachefile
Cache the entries of the log page up to the point of
the last commit.
The
.Ar cachefile
will store the last commit id and the entries in the HTML table.
It is up to the user to make sure the state of the
.Ar cachefile
is in sync with the history of the repository.
.It Fl l Ar commits
Write a maximum number of
.Ar commits
to the log.html file only.
However the commit files are written as usual.
.It Fl u Ar baseurl
Base URL to make links in the Atom feeds absolute.
For example: "https://git.codemadness.org/stagit/".
.El
.Pp
The options
.Fl c
and
.Fl l
cannot be used at the same time.
.Pp
The following files will be written:
.Bl -tag -width Ds
.It atom.xml
Atom XML feed of the last 100 commits.
.It tags.xml
Atom XML feed of the tags.
.It files.html
List of files in the latest tree, linking to the file.
.It log.html
List of commits in reverse chronological applied commit order, each commit
links to a page with a diffstat and diff of the commit.
.It refs.html
Lists references of the repository such as branches and tags.
.El
.Pp
For each entry in HEAD a file will be written in the format:
file/filepath.html.
This file will contain the textual data of the file prefixed by line numbers.
The file will have the string "Binary file" if the data is considered to be
non-textual.
.Pp
For each commit a file will be written in the format:
commit/commitid.html.
This file will contain the diffstat and diff of the commit.
It will write the string "Binary files differ" if the data is considered to
be non-textual.
Too large diffs will be suppressed and a string
"Diff is too large, output suppressed" will be written.
.Pp
When a commit HTML file exists it won't be overwritten again, note that if
you've changed
.Nm
or changed one of the metadata files of the repository it is recommended to
recreate all the output files because it will contain old data.
To do this remove the output directory and
.Ar cachefile ,
then recreate the files.
.Pp
The basename of the directory is used as the repository name.
The suffix ".git" is removed from the basename, this suffix is commonly used
for "bare" repos.
.Pp
The content of the follow files specifies the metadata for each repository:
.Bl -tag -width Ds
.It .git/description or description (bare repo).
description
.It .git/owner or owner (bare repo).
owner of repository
.It .git/url or url (bare repo).
primary clone URL of the repository, for example:
git://git.codemadness.org/stagit
.El
.Pp
When a README or LICENSE file exists in HEAD or a .gitmodules submodules file
exists in HEAD a direct link in the menu is made.
.Pp
For changing the style of the page you can use the following files:
.Bl -tag -width Ds
.It favicon.png
favicon image.
.It logo.png
32x32 logo.
.It style.css
CSS stylesheet.
.El
.Sh EXIT STATUS
.Ex -std
.Sh EXAMPLES
.Bd -literal
mkdir -p htmlroot/htmlrepo1 && cd htmlroot/htmlrepo1
stagit path/to/gitrepo1
# repeat for other repositories.
.Ed
.Pp
To update the HTML files when the repository is changed a git post-receive hook
can be used, see the file example_post-receive.sh for an example.
.Sh SEE ALSO
.Xr stagit-index 1
.Sh AUTHORS
.An Hiltjo Posthuma Aq Mt hiltjo@codemadness.org
